类型提示 - type hints

类型提示 - type hints

官方文档:PEP 484 – Type Hints | peps.python.org

基本语法:Function AnnotationsType Definition Syntax

Pycharm 的相关支持:Type hinting in PyCharm | PyCharm Documentation

python 一直以来都不是开发大工程的主流语言,不管是前端还是后端,主要的原因其实就是以下几点:

但是,在python3.5 之后,就新增了对函数参数和返回值的类型指定和检查,以及在新建变量时也可以指定类型

即便如此,Python 仍将是一种动态类型语言,作者不希望强制使用类型提示,即使是按照约定

如何指定类型?

注意,Python2.x 与 3​​.x 版本并不兼容,Python2.x 与 3​​.x 版本区别 | 菜鸟教程

有一些类型检查器(Type checker)可以用来检查变量类型是否符合我们设置的类型信息:

PyCharm 用的是自己实现的类型检查器,如果你想的话,你也可以把 Pycharm 的类型检查器换成以上任意一种

实践

总的来说,如果本身就偏向于编写带有类型信息的 python 代码,那么类型注解是你的首选,而不是 stubs 文件,stubs 文件只能作为一种之前没写类型信息,后面想补上的补救措施。

在写一些篇幅较短的脚本的时候,为了方便和快捷,我们可以省略变量类型,但是在编写大型项目的时候,一定要把类型注解给加上,否则代码将基本上不可读。

跟 Java 的比较

Java 本身是一种静态语言,声明变量和方法的时候必须有类型,而 Python 是一种动态语言,在运行时,其会自动推断变量的类型,所以在代码编辑阶段,变量的类型提示在语法中是一种可选项,是一种可选项,可写可不写,写了,解释器可以使用其进行类型检查,减少代码编写过程中的错误,不写,也无伤大雅,不影响运行。甚至就算在类型注解中声明了类型,传入别的类型的数据,也依然不会直接报错,而是警告,因为最终会不会报错,还得看运行时的情况,所以对于动态语言来说,变量类型,实在是很松散的一种约束,不像 Java 这种静态语言,类型是一种严格的约束。